package map;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * java.util.Map 查找表
 * Map体现的结构是一个多行两列的表格，其中左列称为key，右列称为value。
 * <p>
 * Map总是成对保存数据。
 * Map总是根据key获取对应的value。
 * Map要求key不允许重复
 * <p>
 * Map是一个接口，规定了该数据结构的功能
 * 常见的实现类:
 * java.util.HashMap:散列表，使用散列算法实现的Map
 * java.util.TreeMap:使用二叉树实现的Map
 */
public class MapDemo1 {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        //内部使用一个链表维护了遍历顺序
//        Map<String,Integer> map = new LinkedHashMap<>();
        /*
            V put(K k,V v)
            将给定的键值对存入Map中。
            Map要求key不允许重复(Map中不存在两个key的equals比较为true的情况):
            如果使用已有的key存入value时，则是替换这个key对应的value值，此时方法返回的
            就是被替换的value。
            如果这个key不存在，则存入键值对后，返回值为null
         */
//        int value = map.put("语文",99);//避免用基本类型接收包装类的返回值，因为可能导致自动拆箱时出现空指针
        Integer value = map.put("语文", 99);//不是重复的key，没有替换，返回值为null
        System.out.println(value);
        map.put("数学", 98);
        map.put("英语", 97);
        map.put("物理", 96);
        map.put("化学", 99);
        System.out.println(map);

        value = map.put("数学", 55);//重复的key，替换数学原有的值98.并将该值返回
        System.out.println(value);
        System.out.println(map);
    }
}
